home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / 011-020 / amok19 / dossupport / dossupport.dok < prev    next >
Text File  |  1993-11-04  |  8KB  |  204 lines

  1. ======================================================================
  2. Dokumentation zu "DosSupport" Version 1.3
  3. Autor: Nicolas Benezan, Postwiesenstr. 2, D7000 Stuttgart 60
  4. ======================================================================
  5.  
  6. Kopierrecht
  7. ­­­­­­­­­­­
  8. Das komplette Packet (Quelltext, Dokumentation und Objectcode) ist
  9. Public Domain Software. Es darf beliebig kopiert und verbreitet werden
  10. solange...
  11.  
  12. * mein Name und dieser Kopierrechtshinweis erhalten bleiben,
  13. * die Vollständigkeit des ganzen Packets gewährleistet ist, und
  14. * mit dem Vertrieb dieser Software kein Gewinn erwirtschaftet wird.
  15.  
  16. Die Kommerzielle Nutzung ohne meine ausdrückliche schriftliche
  17. Genehmigung ist untersagt. Falls Sie dies beabsichtigen, nehmen Sie
  18. bitte unter oben genannter Adresse Kontakt mit mir auf.
  19.  
  20. Verbesserungsvorschläge sind stets willkommen. Falls Sie Veränderungen
  21. am Programm vornehmen, dokumentieren Sie diese bitte gut verständlich.
  22. Es würde mich freuen, wenn Sie mich über größere Veränderungen in
  23. Kenntnis setzen würden.
  24.  
  25. (c) 1988 by Nicolas Benezan. Alle Rechte vorbehalten.
  26.  
  27.  
  28. Übersicht
  29. ­­­­­­­­­
  30. * Umfang des Packets
  31. * Einleitung
  32. * Die Datentypen
  33. * Beschreibung der Prozeduren
  34. * Segmente
  35. * Hinweise
  36. * Literaturverzeichnis
  37.  
  38.  
  39. Umfang des Packets
  40. ­­­­­­­­­­­­­­­­­­
  41. Das komplette Packet "DosSupport" beinhaltet folgendes:
  42.  
  43. * DosSupport.dok          Diese Dokumentation
  44. * DosSupport.doc          Englische Dokumentation
  45. * DosSupport.def          Definitionsmodul
  46. * DosSupport.mod          Implementationsmodul
  47. * DosSupport.sym          Symboldatei (compiliertes Definitionsodul)
  48. * DosSupport.obj          Objektcode (compiliertes Implementationsmodul)
  49.  
  50.  
  51. Einleitung
  52. ­­­­­­­­­­
  53. Bei der Entwicklung des Amiga muß anscheinend Uneinigkeit geherrscht
  54. haben. Man könnte fast meinen, es laufen zwei Betriebssysteme in einer
  55. Maschine: AmigaDos (in BCPL) und Exec (in C). Da wohl die meisten
  56. Amiga-Programmierer in C oder von den Datentypen ähnlichen Sprachen
  57. (natürlich Modula-2) programmieren, ist es lästig, daß viele
  58. Parameter des Dos dem BCPL- und nicht dem Exec-Standard entsprechen.
  59. Dieses Modul stellt Prozeduren zur Konvertierung der Datentypen zur
  60. Verfügung.
  61. Update V1.1: Da der neue Compiler V3.2 jetzt BCPL-Pointer unterstützt,
  62. ist dies wohl nicht mehr das interessanteste an DosSupport. Trotz der
  63. V3.2 Erweiterung wird jedoch empfohlen, für nicht ausschließlich
  64. persönliche Programme weiterhin DosSupport zu benutzen, da die Programme
  65. dann auf andere Compiler übertragbar sind.
  66. Neu in DosSupport sind die Konstanten "Hunk" und der Typ "Segment" sowie
  67. die zugehörigen Prozeduren. Hunks spielen eine große Rolle beim Format
  68. von Programmen auf Diskette. Sie sind in [1] ausführlich beschrieben.
  69. Werden Programme in den Speicher geladen, liegen sie als Segmente vor.
  70. Diese sind im Kapitel "Segmente" beschrieben.
  71.  
  72.  
  73. Die Datentypen
  74. ­­­­­­­­­­­­­­
  75. BCPL-Typen
  76. ----------
  77. APTR/ADDRESS: Byteaddresse, d.h. eine Adresse wie sie direkt vom 68000-
  78. Prozessor verwendet wird.
  79.  
  80. BPTR: BCPL-Pointer bzw. Langwortadresse, also Byteadresse geteilt
  81. durch 4. D.h. alle Dos-Strukturen müssen an durch 4 teilbaren (Byte-)
  82. Adressen beginnen.
  83.  
  84. Exec/C-Strings: Zeiger (Byteadressen) auf Bytefolgen, die mit einer
  85. Null als Endekennzeichen abgeschlossen sind. Auch Modula-Strings sind
  86. mit einer Null abgeschlossen.
  87.  
  88. BSTR, Dos/BCPL-Strings: Zeiger (Langwortadressen) auf eine Folge von
  89. Bytes - das erste Byte enthält die Länge des Strings [0..255], danach
  90. folgt der eigentliche String (ohne Abschlußzeichen).
  91.  
  92. Device-List-Typen
  93. -----------------
  94. Der Typ "DeviceListPtr" wurde eingeführt, um in Modula vernünftig (auch auf
  95. andere Compiler übertragbar) mit DeviceListen umzugehen. Vorsicht: im Modul
  96. "Dos" gibt es den einen Typ mit gleichem namen, der jedoch ein BPTR ist.
  97.  
  98. Die Typen "StartupInfo" und "DiskInfo" sind anscheinend im Modul "Dos"
  99. vergessen worden. Das Feld "Dos.DeviceList.startup" ist in Wirklichkeit gar
  100. kein LOGNINT sondern ein BPTR zu einem StartupInfo-RECORD. in diesem
  101. wiederum befindet sich ein BPTR zu einem DiskInfo-RECORD. Er enthält alle
  102. wichtigen Informationen über ein Diskettengerät, wie sie in der MountList
  103. angegeben werden.
  104.  
  105.  
  106. Beschreibung der Prozeduren
  107. ­­­­­­­­­­­­­­­­­­­­­­­­­­­
  108.  
  109. GetDevList
  110. ----------
  111. Gibt einen Zeiger (Byteadresse) auf die Dos-DeviceList zurück. Dieser
  112. berechnet sich aus DosBase^.root^.info^.devInfo, wobei zu beachten
  113. ist, daß dieser Ausdruck direkt in Modula keinen Sinn gibt, da die
  114. Dos-Zeiger ja BPTRs sind. In der DeviceList sind ale gerade verfügbaren
  115. Volumes, Devices und assignierten Directories (logische Devices)
  116. aufgelistet. Vorsicht: die Verkettung (mit DeviceList.next) geschieht
  117. über BPTRs, nicht mit ExecNodes.
  118.  
  119. BPTRtoADR
  120. ---------
  121. Wandelt einen BCPL-Pointer in eine in Modula verwendbare ADDRESS um.
  122.  
  123. ADRtoBPTR
  124. ---------
  125. Wandelte eine ADDRESS in einen BCPL-Pointer. Vorsicht: die Adresse muß
  126. durch 4 teilbar sein (Longword-aligned), sonst bricht das Programm mit
  127. einer Fehlermeldung ab.
  128.  
  129. BSTRtoStr
  130. ---------
  131. Kopiert einen BCPL-String in einen Modula-2-gerechten (ARRAY OF CHAR).
  132. Aus EinfachheitsgrÜnden wird der String selbst (VAR) und nicht ein
  133. Zeiger (so wie in C) übergeben.
  134.  
  135. StrToBCPL
  136. ---------
  137. Konvertiert einen Modula-2-String in einen BCPL-String, wobei aller-
  138. dings nur die Bytefolge übergeben wird, kein BSTR (BPTR auf BCPL-
  139. String). Den BSTR erhält man mit:
  140. StrToBCPL(String);
  141. MyBSTR:=ADRtoBPTR(ADR(String));
  142. Dies wurde so gewählt, weil sonst der String in einen eigenen Speicher-
  143. bereich kopiert werden müßte, den DosSupport allozieren müßte.
  144.  
  145. Segmente
  146. ­­­­­­­­
  147. Wird ein ausführbares Programm, das aus einem oder mehreren Hunks
  148. besteht, mit Dos.LoadSeg() in den Speicher geladen, wird dies nicht
  149. unbedingt in einen zusammenhängenden Speicherbereich getan. Das
  150. Programm wird je nach Anzahl der Hunks in Segmente unterteilt. LoadSeg()
  151. gibt einen BCPL-Pointer (BPTR) auf eine Segmentliste zurück. Diese ist
  152. so aufgebaut, daß der BPTR auf das Langwort VOR dem eigentlichen Code-
  153. oder Datenspeicherbereich zeigt. In diesem Langwort befindet sich wieder
  154. ein BPTR, der auf das Langwort vor dem nächsten Segment zeigt oder NIL
  155. ist, wenn es kein weiteres Segment mehr gibt. Jewils zwei Langworte VOR
  156. dem Segmentanfang steht die Länge des Segments in Bytes einschließlich
  157. der zwei zusätzlichen Langworte.
  158. Da in Modula die Felder eines RECORDs immer nur positive Offsets von der
  159. Adresse des RECORDs haben können, müßte man bei den Segmenten wegen der
  160. negativen Offsets sehr umständlich mit BPTRn und ADDRESSen hantieren.
  161. Dies nimmt einem die Prozedur GetSegmentAddr() ab. Man erhält zB. mit
  162.  
  163.   VAR     Seg:SegmentPtr;
  164.   ...
  165.   Seg:=GetSegmentAddr(LoadSeg(...));
  166.  
  167. einen Zeiger auf das erste Segment und mit
  168.  
  169.   Seg:=GetSegmentAddr(Seg^.nextSegment);
  170.  
  171. das nächste (oder NIL, falls nicht vorhanden).
  172. Die Größe des Code- oder Datenbereichs erhält man mit
  173.  
  174.   Size:=Seg^.segmentSize-8; (* 8=2*SIZE(LONGWORD) *).
  175.  
  176.  
  177. Hinweise
  178. ­­­­­­­­
  179.  
  180. DosBase
  181. -------
  182. Zusätzlich wird von DosSupport die Variable DosBase exportiert, die
  183. sonst von Modula nur schwer erreichbar ist. Sie darf gelesen, aber
  184. niemals verändert werden.
  185.  
  186. Dos.def
  187. -------
  188. Wer noch mit dem alten Compilerhandbuch (V3.1 und älter) arbeitet,
  189. sollte beachten, daß dort das Definitionsmodul von Dos nicht korrekt
  190. beschrieben ist. Es wird nicht zwischen ADDRESS und BPTR unterschieden.
  191. Es empfiehlt sich, sich ein Update zu besorgen. Bei der Compiler-
  192. version 3.11 ist das korrekte Dos.def auf Diskette mitgeliefert, die
  193. Handbücher ab V3.2 sind verbessert worden.
  194.  
  195.  
  196. Literaturverzeichnis
  197. ­­­­­­­­­­­­­­­­­­­­
  198. [1] "AmigaDos Technical Reference Manual", CBM, Chapter 2.2
  199.     oder "AmigaDos Manual", Bantam Books
  200.  
  201. [2] "Amiga Rom Kernel Reference Manual: Exec",
  202.     Appendix B: AmigaDos general information, CBM, Addison Wesley
  203.  
  204.